package main

import (
	dataModel "assistant/biz/model"

	"context"
	"encoding/json"
	"fmt"
	"log"
	"os"
	"time"

	"github.com/cloudwego/hertz/pkg/app/client"
	"github.com/cloudwego/hertz/pkg/protocol"
	"github.com/cloudwego/hertz/pkg/protocol/consts"
)

const (
	baseURL = "http://127.0.0.1:8888"
)

func init() {
	// 设置开发环境
	os.Setenv("ENV", "dev")
}

func main() {
	// 初始化上下文
	ctx := context.Background()

	// 初始化Hertz客户端
	c, err := client.NewClient()
	if err != nil {
		log.Fatalf("创建Hertz客户端失败: %v", err)
	}

	// 模拟用户ID
	userID := int64(12345)

	// 1. 开始会话 - 用户进入商品详情页
	startReq := &dataModel.StartConversationRequest{
		UserId:    userID,
		ProductId: 1, // XX品牌降噪蓝牙耳机
		Context:   "高端降噪蓝牙耳机，采用先进降噪技术，舒适佩戴设计",
	}

	// 序列化请求体
	reqBody, err := json.Marshal(startReq)
	if err != nil {
		log.Fatalf("序列化请求失败: %v", err)
	}

	// 发送开始会话请求
	startResp := &dataModel.AIResponseMessage{}
	req := protocol.AcquireRequest()
	resp := protocol.AcquireResponse()
	req.SetMethod(consts.MethodPost)
	req.SetRequestURI(baseURL + "/assistant/conversation/start")
	req.SetBody(reqBody)
	req.Header.SetContentTypeBytes([]byte("application/json"))

	if err := c.Do(ctx, req, resp); err != nil {
		log.Fatalf("发送请求失败: %v", err)
	}

	// 解析响应
	if err := json.Unmarshal(resp.Body(), startResp); err != nil {
		log.Fatalf("解析响应失败: %v", err)
	}

	log.Printf("AI助手: %s\n", startResp.Content)

	// 记录会话ID
	conversationID := startResp.ConversationId

	// 模拟用户消息列表
	userMessages := []string{
		"嗯，随便看看，降噪效果怎么样？",
		"主要是通勤路上用，地铁里太吵了。",
		"舒适度还挺重要的，每天通勤单程要一个小时。",
		"YY品牌的？好啊，发来看看。",
		"感觉YY品牌的更适合我，舒适度重要点。",
		"可以，帮我把这个放到购物车吧！",
		"暂时没有了，谢谢。",
	}

	// 循环发送用户消息
	for _, message := range userMessages {
		userMsg := &dataModel.UserMessageRequest{
			ConversationId: conversationID,
			UserMessage:    message,
		}

		// 序列化请求体
		reqBody, err := json.Marshal(userMsg)
		if err != nil {
			log.Fatalf("序列化请求失败: %v", err)
		}

		// 发送用户消息请求
		msgResp := &dataModel.AIResponseMessage{}
		req := protocol.AcquireRequest()
		resp := protocol.AcquireResponse()
		req.SetMethod(consts.MethodPost)
		req.SetRequestURI(baseURL + "/assistant/conversation/message")
		req.SetBody(reqBody)
		req.Header.SetContentTypeBytes([]byte("application/json"))

		if err := c.Do(ctx, req, resp); err != nil {
			log.Fatalf("发送请求失败: %v", err)
		}

		// 解析响应
		if err := json.Unmarshal(resp.Body(), msgResp); err != nil {
			log.Fatalf("解析响应失败: %v", err)
		}

		log.Printf("用户: %s\n", message)
		log.Printf("AI助手: %s\n", msgResp.Content)

		// 暂停1秒，模拟真实对话节奏
		time.Sleep(time.Second)
	}

	fmt.Println("\n测试完成！")
}
